"""
确定链表值是否为回文结构    wget -nc https://labfile.oss.aliyuncs.com/courses/1512/linked_list.py

挑战介绍
实现一个算法来检测链表结点的数据元素是否为回文结构。回文的解释如下：

回文是从头读到尾与从尾读到头一模一样的结构，例如 abcba，1221。
挑战内容
本次挑战中，你需要在 palindrome.py 文件中补充函数 is_palindrome 的空缺部分。

MyLinkedList 类继承“实现链表类”挑战中的 LinkedList 类。
MyLinkedList 类的 is_palindrome 方法用于检测链表结点的数据元素是否为回文结构，它没有输入值，需要返回一个布尔值，即 True 或 False。
如果链表没有结点，则返回 False；如果链表只有一个结点，也返回 False。

"""
from linked_list import LinkedList


class MyLinkedList(LinkedList):

    def is_palindrome(self):
        if self.head is None or self.head.next is None:
            return False
        curr = self.head
        reversed_list = MyLinkedList()
        length = 0

        # Reverse the linked list
        while curr is not None:
            reversed_list.insert_to_front(curr.data)
            length += 1
            curr = curr.next

        # Compare the reversed list with the original list
        # Only need to compare the first half
        iterations = length // 2
        curr = self.head
        curr_reversed = reversed_list.head
        for _ in range(iterations):
            if curr.data != curr_reversed.data:
                return False
            curr = curr.next
            curr_reversed = curr_reversed.next
        return True
